package com.softer.wxzj.service;

import com.github.pagehelper.PageInfo;
import com.softer.wxzj.common.entity.CommonResult;
import com.softer.wxzj.common.entity.Page;
import com.softer.wxzj.entity.*;

import java.util.List;

/**
 * @author Gong Zhiyang
 * @date 2019/6/28
 */
public interface DepositApplyService {


    /**
     * 精确/模糊查询 交存申请查询列表
     *
     * @param page           分页实体
     * @param baseRegionInfo 查询实体
     * @param fuzzy          模糊查询字段
     * @return 交存申请查询列表
     */
    PageInfo<BaseRegionInfo> getDepositApplyList(Page page, BaseRegionInfo baseRegionInfo, String fuzzy);

    PageInfo<DepositApply> findDepositApplyList(Page page, DepositApply depositApply);

    /**
     * 精确/模糊查询 根据申请ID查询申请明细
     *
     * @param page         分页实体
     * @param depositAudit 查询实体
     * @param fuzzy        模糊查询字段
     * @return 申请明细
     */
    PageInfo<DepositAudit> getListByReqId(Page page, DepositAudit depositAudit, String fuzzy);

    /**
     * 精确/模糊查询 根据小区ID查询申请列表
     *
     * @param page         分页实体
     * @param depositApply 查询实体
     * @param fuzzy        模糊查询字段
     * @return 申请列表
     */
    PageInfo<DepositApply> getListByRegionId(Page page, DepositApply depositApply, String fuzzy);

    /**
     * 查询代缴企业列表
     *
     * @param id 小区ID
     * @return 企业列表
     */
    List<BaseOrganization> getOrganization(String id);

    /**
     * 查询业主自交列表或者企业代缴申请列表
     *
     * @param page         分页实体
     * @param depositAudit 查询实体
     * @param fuzzy        模糊查询字段
     * @return 申请列表
     */
    PageInfo<DepositAudit> getDepositApplyListByRegionId(Page page, DepositAudit depositAudit, String fuzzy);

    /**
     * 交存申请
     *
     * @param list      申请id列表
     * @param type      交存模式（00 为自缴 01为企业代缴）
     * @param validDate 申请有效日期
     * @param corpNo    开发商ID
     * @return 详情列表
     */
    CommonResult depositAudit(List<String> list, String type, String validDate, String corpNo);

    /**
     * 获取刚交存申请的打印通知单列表
     *
     * @param list 申请id列表
     * @return 打印通知单列表
     */
    List<DepositAudit> getPrintList(List<String> list);

    /**
     * 修改 凭证编号
     *
     * @param startNo
     * @param endNo
     * @param startWith
     * @return ludexing
     */
    CommonResult updateDepositApplyNo(String startNo, String endNo, String startWith);

    /**
     * 批量撤销 申请
     *
     * @param depositApplyIds
     * @return
     */
    CommonResult depositApplyRevocation(String depositApplyIds);

    DepositApply getInfo(String id);

    /**
     * 更新 申请日期
     *
     * @param depositApply
     * @return
     */
    CommonResult updateValidDate(DepositApply depositApply);

    /**
     * 催缴打印列表
     *
     * @param page           分页实体
     * @param baseRegionInfo 查询实体
     * @return 列表
     */
    PageInfo<BaseRegionInfo> printCall(Page page, BaseRegionInfo baseRegionInfo);
    /**
     * 根据小区ID查询催缴打印列表
     *
     * @param page           分页实体
     * @param baseHouseInfo 查询实体
     * @return 列表
     */
    PageInfo<BaseHouseInfo> printCallByRegionId(Page page, BaseHouseInfo baseHouseInfo);
    /**
     * 通知书打印
     * 补打和交存凭证打印，查询的是所有记账后的数据，state=4；
     * 交存通知打印，查询的是申请后，未记账的数据，state=3
     *
     * @param page         分页实体
     * @param depositApply 查询实体
     * @return 打印列表
     */
    PageInfo<DepositApply> printNotice(Page page, DepositApply depositApply);

    /**
     * 或业主自交申请日期
     * @param corpType
     * @return
     */
    String time(String corpType);
    /**
     * 精确/模糊查询 根据申请ID查询申请明细的本页合计和总合计
     *
     * @param page         分页实体
     * @param depositAudit 查询实体
     * @param fuzzy        模糊查询字段
     * @return 申请明细的本页合计和总合计
     */
    List<DepositAudit> getTotalByReqId(Page page, DepositAudit depositAudit, String fuzzy);
    /**
     * 批量查询交存清册
     *
     * @param page 分页实体
     * @param reqIdList 交存申请ID集合
     * @return 清册列表
     */
    PrintList batchPrintList(Page page, String reqIdList);

    /**审核查看
     * @param page
     * @param depReq
     * @return
     */
    PageInfo<DepReq> subimtDepReqList(Page page, DepReq depReq);
/**
 * 资金补齐申请查询
 */
    PageInfo<DepReq> getAllDepReqList(Page page, DepReq depReq);

    /**
     * 资金补齐撤销
     * @param id
     * @return
     */
    CommonResult findDeposiy(String id);

    /**
     * 资金审核查询
     * @param page
     * @param depReq
     * @return
     */
    PageInfo<DepReq> submitDepList(Page page, DepReq depReq);
}
